package com.codewsq.sup;

import com.codewsq.sub.Student;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

public class Other extends Student {

    public static void main(String[] args) {
        // protected 权限修饰符 同包的其他类都可以随意调用
        // 不同包只有其子类中可以使用
        Person person = new Person();
        person.id = 1;


        String str1 = new String("哈哈");
        String str2 = new String("哈哈");
        // 这样子复制是相当于实例化了两个不同的对象，对象地址不同，哪怕内容一样， 使用 == 比较引用地址也是不同的引用地址，
        // 所以 str1 == str2为false
        System.out.println(str1 == str2); // false
        System.out.println(str1.equals(str2));
        System.out.println(Objects.equals(str1, str2));

        System.out.println("************************************");

        /*因为 String 类型常量，常量赋值会在常量堆里，如果有第二个常量的值和第一个常量的值相等，
        那么java会默认将第一个常量的引用地址赋给第二个常量*/
        String a = "嘻嘻";
        String b = "嘻嘻";
        System.out.println(a == b);


        List list = new ArrayList();
    }


    @Test
    public void junitTest() {

        System.out.println("junit 测试。。。");
    }

    @Test
    public void persionTest() {
        Person person = new Person();
        System.out.println(person.getClass());

        Object obj = new Person();
        System.out.println(obj.getClass());

        System.out.println(obj.getClass() == person.getClass());
        System.out.println("********************************");

        Man man = new Man();
        System.out.println(man.getClass());
        Person pMan = new Man(); // 此时 变量Person pMan的实际引用的是 Man类型的对象，所以pMan.getClass()得到的值是Man类型
        System.out.println(pMan.getClass());

    }
}
